package dto

import (
	"io"

	// "github.com/goburrow/modbus"
	"github.com/jacobsa/go-serial/serial"
	"github.com/robinson/gos7"

	//"openzbox.com/driver/conn/serial"
	"openzbox.com/protocol/modbus"
)

// 1
// 数据结构
type Parameter struct {
	Description string
	Code        string
	Value       string
}

// 1
// 设备功能码配置 缓存
type Serial_Slave_Detail_Cache struct {
	ID               int64
	Serial_ID        int64 //串口配置的外键
	Serial_Slave_ID  int64
	CollectAddressID int64  //采集的寄存器位置
	Type             int64  //功能码 1：ReadCoils 2：ReadDiscreteInputs 3：ReadHoldingRegisters 4：ReadInputRegisters 0：DLT645RTU 10:西门子S7 11:cj188
	Value            string //需要上报的十六进制数据
	CreateTime       string
	Value2           *string //转换后对应数据 (mqtt用这个)
	Value3           *string //采集的原始数据
	ValueError       *string //采集失败的时候标记值为EEEE
}

// modbus的参数
type Test struct {
	ClientClient  modbus.Client
	Data2ID       int64
	DataID        int64
	ComName       string
	ModbusSlaveID string
	//Clients       *modbus.RTUClientHandler
	TPITV string
	I     int
}
type CollectSet struct {
	ClientClient  modbus.Client
	Data2ID       int64
	DataID        int64
	ComName       string
	ModbusSlaveID string
	//Clients       *modbus.RTUClientHandler
	TPITV            int
	Timeout          int
	SBTimeout        int
	RetryCount       int
	P                modbus.ClientProvider
	IsEnd            bool //是否采集结束可以进入下一次
	IsErrorBreak     int  //失败跳过当前设备剩下的点位采集 1:开启  2：关闭
	ErrorMoveToFront int  //采集失败把采集参数提前并直接开始下一次采集 1:开启  2：关闭

	//DLT645
	Port      io.ReadWriteCloser
	Options   serial.OpenOptions
	DLTisSend bool //ture：可以发送 false：不可以
	SerialID  int64
	//西门子s7
	S7Client  gos7.Client
	S7Handler *gos7.TCPClientHandler
	//cj188
	CJ188Port io.ReadWriteCloser
}

// 错误跳过
type ErrorBreakList struct {
	Serial_Slave_ID             int64  //需要跳过的id
	Serial_Slave_Detail_ID_List string //需要跳过的集合
	Type                        int64
}

type RereportedTagList struct {
	DeviceInfo_ID int64
	RereportedDay int //哪一天上传过 一天只能查询一次
}

// mqtt 订阅的返回消息
type MQTTSubscribeStr struct {
	Id   string `json:"id"`
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}
